// 验证手机号的正则表达式，确保输入的手机号格式正确。
export const validateMobile = (_: any, value: any) => {
  if (value && !/^(?:(?:\+|00)86)?1[3-9]\d{9}$/.test(value)) {
    return Promise.reject('请输入有效的手机号码')
  }
  return Promise.resolve()
}
// 验证电子邮箱的正则表达式，确保输入的电子邮箱格式正确。
export const validateEmail = (_: any, value: any) => {
  const reg =
    /^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$/
  if (value && !reg.test(value)) {
    return Promise.reject('请输入有效的电子邮箱')
  }
  return Promise.resolve()
}
// 验证密码的正则表达式，确保输入的密码格式正确。
export const validatePassword = (_: any, value: any) => {
  if (!value) {
    return Promise.reject('请输入密码')
  }

  // 规则1: 长度 8-16
  if (value.length < 8 || value.length > 16) {
    return Promise.reject('密码长度必须为8-16个字符')
  }

  // 规则2: 只允许指定字符
  const validChars = /^[a-zA-Z0-9_~@#$^]+$/
  if (!validChars.test(value)) {
    return Promise.reject('密码只能包含字母、数字或_~@#$^符号')
  }

  // 规则3: 至少包含四种字符中的两种
  const hasUpper = /[A-Z]/.test(value)
  const hasLower = /[a-z]/.test(value)
  const hasDigit = /[0-9]/.test(value)
  const hasSpecial = /[_~@#$^]/.test(value)

  const typeCount = [hasUpper, hasLower, hasDigit, hasSpecial].filter(
    Boolean
  ).length
  if (typeCount < 2) {
    return Promise.reject(
      '密码需包含大写字母、小写字母、数字、特殊字符(_~@#$^)中至少两种'
    )
  }

  return Promise.resolve()
}

// 手机号加密函数
export const maskPhone = (any: any) => {
  if (!any) return ''
  if (any.length <= 4) return any
  return any.substring(0, 3) + '****' + any.substring(any.length - 4)
}
